package zhoug.common.utils;

import android.app.Activity;
import android.content.Context;
import android.view.View;
import android.view.inputmethod.InputMethodManager;

/**
 * 软键盘输入工具类
 *
 * @Author 35574
 * @Date 2020/6/4
 * @Description
 */
public class SoftInputMethodManager {

    private Context context;

    public SoftInputMethodManager(Context context) {
        this.context = context;
    }

    /**
     * 获取系统 InputMethodManager
     *
     * @return
     */
    private InputMethodManager getInputMethodManager() {
        InputMethodManager imm = null;
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
            imm = context.getSystemService(InputMethodManager.class);
        } else {
            imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
        }
        return imm;
    }

    /**
     * 显示软键盘
     *
     * @param view 当前焦点视图，可接受软键盘输入
     */
    public void showSoftInput(View view) {
        InputMethodManager imm = getInputMethodManager();
        //软键盘处于活动状态
        if (imm != null && imm.isActive()) {
            //注意:获取了焦点才能弹出软键盘
            if (!view.hasFocus()) {
                view.setFocusable(true);//允许获取焦点
                view.setFocusableInTouchMode(true);//触摸时可以获取焦点
                view.requestFocus();//请求焦点
            }

            imm.showSoftInput(view, 0);
        }
    }

    /**
     * 关闭软键盘
     *
     * @param view { 注意这里虽然原则上需要传递一个之前弹出键盘传递的时候，传递的 View 的 windowToken ，
     *             但是实际情况是你只需要传递一个存在于当前布局 ViewTree 中，随意一个 View 的 windowToken 就可以了}
     */
    public void hideSoftInput(View view) {
        InputMethodManager imm = getInputMethodManager();
        //输入法中的任意视图激活时返回真
        if (imm != null && imm.isActive()) {
            imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
        }
    }

    /**
     * 关闭软键盘
     *
     * @param activity
     */
    public void hideSoftInput(Activity activity) {
        InputMethodManager imm = getInputMethodManager();
        if (imm != null && imm.isActive()) {
            //当前获取焦点的视图
            View currentFocus = activity.getCurrentFocus();
            if (currentFocus != null) {
                imm.hideSoftInputFromWindow(currentFocus.getWindowToken(), 0);
            }
        }
    }

    /**
     * 切换软键盘:如输入窗口已显示，它隐藏。如无输入窗口则显示
     */
    public void toggleSoftInput() {
        InputMethodManager imm = getInputMethodManager();
        //软键盘处于活动状态
        if (imm != null && imm.isActive()) {
            imm.toggleSoftInput(0, 0);
        }
    }


}
